Virtual machines enable a host computer to run multiple application environments or operating systems on the same computer simultaneously. The host computer allots a certain amount of the host's resources to each of the virtual machines. Each virtual machine is then able to use the allotted resources to execute applications, including operating systems. The virtual machine virtualizes the underlying hardware of the host computer or emulates hardware devices, making the use of the virtual machine transparent to the operating system or the user of the application. Typical virtual machines make use of virtual machine image files to store the desired application environment or operating system. One common type of virtual machine image file is the virtual hard drive (“VHD”). To the host system, a VHD is simply a large file that can be copied and backed up and to which standard file system permissions can be applied. To the virtual machine, the VHD file appears to be a full hard drive, and typically contains an operating system and a set of applications.
For modern operating systems, virtual machine image files can typically grow to several gigabytes in size. Because users or software developers often maintain several virtual image files or VHDs, maintaining and efficiently storing the virtual machine image files can be difficult. The problem becomes worse in large organizations where multiple users are independently maintaining their own image libraries. This results in large storage space requirements, even though these images typically share large amounts of common operating system or application code.
What is needed are fast and efficient systems and methods for the transfer and storage of virtual machine image files.